

import { cardCache } from 'nc-lightapp-front';

/**
 * 卡片下更新缓存数据使用
 * @param {*} props
 * @param {主键字段code} pk_field
 * @param {主键值} pkvalue
 * @param {单据数据} cacheData
 * @param {区域ID} moduleId
 * @param {缓存标识key} datasource
 */
function updateCacheData(pk_field, pkvalue, cacheData, moduleId, datasource) {
        let { updateCache } = cardCache;
        updateCache(pk_field, pkvalue, cacheData, moduleId, datasource);
}

/**
 * 卡片下新增保存使用
 * @param {*} props
 * @param {主键字段code} pk_field
 * @param {主键值} pkvalue
 * @param {单据数据} cacheData
 * @param {区域ID} moduleId
 * @param {缓存标识key} datasource
 */
function addCacheData(pkvalue, cacheData, moduleId, datasource) {
        let { addCache } = cardCache;
        addCache(pkvalue, cacheData, moduleId, datasource);
}

/**
 * 卡片下删除更新缓存
 * @param {*} props
 * @param {主键字段code} pk_field
 * @param {主键值} pkvalue
 * @param {缓存标识key} datasource
 */
function deleteCacheData(pk_field, pkvalue, datasource) {
        let { deleteCacheById } = cardCache;
        deleteCacheById(pk_field, pkvalue, datasource);
}

/**
 * 卡片下删除自动翻到下一页使用
 * @param {*} props
 * @param {主键字段code} pk_field
 * @param {主键值} pkvalue
 * @param {单据数据} cacheData
 * @param {区域ID} moduleId
 * @param {缓存标识key} datasource
 */
function getNextId(pkvalue, datasource) {
        let { getNextId } = cardCache;
        let nextId = getNextId(pkvalue, datasource);
        return nextId;
}

/**
 * 列表下删除使用
 * @param {*} props
 * @param {区域ID} tableId
 * @param {主键值} pkvalue
 */
function deleteCacheDataForList(props, tableId, pkvalue) {
        if (pkvalue instanceof Array) {
                pkvalue.forEach(element => {
                        props.table.deleteCacheId(tableId, element);
                });
        } else {
                props.table.deleteCacheId(tableId, pkvalue);
        }
}

/**
 *
 * @param {*} props
 * @param {区域ID} tableId
 * @param {主键字段code} pk_field
 * @param {批量处理后台返回的数据结构} messageInfo
 */
function updateCacheDataForList(props, tableId, pk_field, messageInfo, index) {
        let sucessrows = messageInfo.sucessVOs;
        if (sucessrows == null || sucessrows.length == 0) {
                return;
        }

        // 组装更新数据
        let updateDatas = [];
        // 列表表头按钮
        if (index == undefined) {
                // 更新成功的数据
                //1. 构建界面选择的信息 主键和index的对应关系
                let selMap = {};
                let selrows = props.table.getCheckedRows(tableId);
                selrows.forEach(row => {
                        let selpk = row.data.values[pk_field].value;
                        selMap[selpk] = row.index;
                });
                sucessrows[tableId].rows.forEach((sucessrow) => {
                        let pkvalue = sucessrow.values[pk_field].value;
                        let updateData = {
                                index: selMap[pkvalue],
                                data: { values: sucessrow.values },
                        };
                        updateDatas.push(updateData);
                });
        } else {
                let updateData = {
                        index: index,
                        data: { values: sucessrows[tableId].rows[0].values },
                };
                updateDatas.push(updateData);
        }
        props.table.updateDataByIndexs(tableId, updateDatas);
}

/**
 * 卡片下获取缓存数据
 * @param {} props
 * @param {缓存标识key} dataSource
 * @param {主键值} pk
 */
function getCacheDataByPk(dataSource, pk) {
        let { getCacheById } = cardCache;
        return getCacheById(pk, dataSource);
}


/**
 * 自定义缓存处理
 * @param {缓存标识key} dataSource
 * @param {自定义缓存标识} key
 * @param {自定义缓存数据} data
 */
function setDefData(dataSource, key, data) {
        let { setDefData } = cardCache;
        setDefData(key, dataSource, data);
}

/**
 * 自定义缓存处理
 * @param {缓存标识key} dataSource
 * @param {自定义缓存标识} key
 */
function getDefData(dataSource, key) {
        let { getDefData } = cardCache;
        return getDefData(key, dataSource);
}

/**
 * 卡片下获取列表当前页的最后一条pk
 * @param {缓存标识key} dataSource
 * @param {自定义缓存标识} key
 */
function getCurrentLastId(dataSource) {
        let { getCurrentLastId } = cardCache;
        return getCurrentLastId(dataSource);
}



export {

        updateCacheData,
        deleteCacheData,
        getCacheDataByPk,
        addCacheData,
        setDefData,
        getDefData,
        getCurrentLastId,
        getNextId,
        deleteCacheDataForList,
        updateCacheDataForList

};
